#Primer importo la base de dades
library(readxl)
dades_alcaldes <- read_excel("dades_alcaldes.xls")
View(dades_alcaldes)

#Comprovem que estan en el format correcte
str(dades_alcaldes)
#Faig que no mostri els números en notació científica
options(scipen = 999)

#Taula descriptiva dels estadístics de les variables numèriques
install.packages("dplyr")
install.packages("purr")
install.packages("tibble")

library(dplyr)
library(purrr)
library(tibble)

taula_descriptiva <- dades_alcaldes %>%
  select(where(is.numeric)) %>%
  map_dfr(~ tibble(
    mitjana = mean(.x, na.rm = TRUE),
    mediana = median(.x, na.rm = TRUE),
    desviació = sd(.x, na.rm = TRUE),
    minim = min(.x, na.rm = TRUE),
    maxim = max(.x, na.rm = TRUE)
  ), .id = "variable")

print(taula_descriptiva)


#Mitjana de duració dels alcaldes al càrrec
44/mean(dades_alcaldes$num_alcaldes)
44/mean(dades_alcaldes$num_partits_alcaldia)


#Creació de dos histogrames
install.packages("ggplot2")
library(ggplot2)

#Histograma del nombre d'alcaldes diferents per municipi
ggplot(dades_alcaldes, aes(x = num_alcaldes)) +
  geom_bar(stat = "count", fill = "skyblue") +
  geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +  
  labs(title = "Alcaldes diferents per municipi",  
       x = "Nombre d'alcaldes diferents", 
       y = "Freqüència de municipis") + 
  theme_minimal() +
  theme(plot.title = element_text(face = "bold")) +
  scale_x_continuous(breaks = 1:12)  

ggsave("histograma_alcaldes.png", width = 8, height = 6, dpi = 300)


# Crear l'histograma del nombre de partits
ggplot(dades_alcaldes, aes(x = num_partits_alcaldia)) +
  geom_bar(stat = "count", fill = "skyblue") +
  geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +  
  labs(title = "Partits diferents que han ocupat l'alcaldia",  
       x = "Nombre de partits", 
       y = "Freqüència de municipis") + 
  theme_minimal() +
  theme(plot.title = element_text(face = "bold")) +
  scale_x_continuous(breaks = 1:12)  
ggsave("histograma_partits.png", width = 8, height = 6, dpi = 300)


#Ara vull veure algunes dades concretes:
#Municipis que només han tingut un alcalde
library(dplyr)
municipis_1_alcalde <- dades_alcaldes %>%
  filter(num_alcaldes == 1)
print(municipis_1_alcalde)

#Municipis que han tingut més alcaldes
municipis_10_alcaldes <- dades_alcaldes %>%
  filter(num_alcaldes == 10)
print(municipis_10_alcaldes)

#Municipis on sempre ha governat el mateix partit
municipis_1_partit <- dades_alcaldes %>%
  filter(num_partits_alcaldia == 1)
print(municipis_1_partit, n=50)


#Models de regressió
#Model 1: atur
m1_atur <- lm(num_alcaldes ~ taxa_atur, data = dades_alcaldes)
summary(m1_atur)

#Model 2: població
m2_poblacio <- lm(num_alcaldes ~ poblacio, data = dades_alcaldes)
summary(m2_poblacio)

#Model 3: edat
m3_edat <- lm(num_alcaldes ~ edat_mitjana, data = dades_alcaldes)
summary(m3_edat)

#Model 4: ideologia 
#Recodifico aquesta variable com a dummy amb esquerra com a categoria de referència

str(dades_alcaldes$ideol_partits_indep)
table(dades_alcaldes$ideol_partits_indep, useNA = "always")

dades_alcaldes$ideol_partits_indep <- factor(
  dades_alcaldes$ideol_partits_indep,
  levels = c(0, 1, 2),
  labels = c("esquerra", "independent", "dreta"))

dades_alcaldes$ideol_partits_indep <- relevel(
  dades_alcaldes$ideol_partits_indep,
  ref = "esquerra")

#Comprovem que això s'ha fet bé
str(dades_alcaldes$ideol_partits_indep)
table(dades_alcaldes$ideol_partits_indep, useNA = "always")

m4_ideol <- lm(num_alcaldes ~ ideol_partits_indep, data = dades_alcaldes)
summary(m4_ideol)


#Model 5: Múltiple (sense controls)
m5_multi <- lm(num_alcaldes ~ taxa_atur + poblacio + edat_mitjana + ideol_partits_indep, data = dades_alcaldes)
summary(m5_multi)


#Model 6: Múltiple (amb controls)
m6_multi_controls <- lm(num_alcaldes ~ taxa_atur + poblacio + edat_mitjana + ideol_partits_indep + capital_provincia + dens_pob + altitud + num_legislatures, data = dades_alcaldes)
summary(m6_multi_controls)



#Visualitzo els coeficients i l'error estàndard dels 6 models en una taula
install.packages("stargazer")
library(stargazer)

stargazer(m1_atur, m2_poblacio, m3_edat, m4_ideol, m5_multi, m6_multi_controls,
          type = "text",
          title = "Models de regressió sobre la rotació a l'alcaldia",
          dep.var.labels = "Nombre d'alcaldes diferents (1979–2023)",
          column.labels = c("Atur", "Població", "Edat", "Ideologia","Múltiple", "Amb Controls"),
          covariate.labels = c(
            "Taxa d'atur",          
            "Població",             
            "Edat mitjana",      
            "Ideologia independent", 
            "Ideologia dreta",      
            "Capital província",    
            "Densitat població",            
            "Altitud",    
            "Nº de legislatures"    
          ),
          omit.stat = c("f", "ser", "adj.rsq"),
          no.space = TRUE,
          digits = 3,
          star.cutoffs = c(0.05, 0.01, 0.001),
          notes.label = "Notes:",
          notes = "Errors estàndard entre parèntesis. * p<0.05, ** p<0.01, *** p<0.001")


#Buscant la mitjana d'alcaldes de cada comarca

mitjana_alcaldes_comarca <- dades_alcaldes%>%
  group_by(comarca) %>%
  summarise(mitjana_alcaldes = mean(num_alcaldes, na.rm = TRUE)) %>%
  arrange(desc(mitjana_alcaldes))  # Opcional: ordenar de més a menys

print(mitjana_alcaldes_comarca, n = 50)


#Ara faig els models de regressió però excloent els 13 municipis constituïts després de 1979
#Primer busco quins són i creo una bbdd filtrada sense ells

municipis_incomplets <- dades_alcaldes %>%
  filter(num_legislatures < 12) %>%
  select(nom_municipi, num_legislatures)

print(municipis_incomplets)

dades_filtrades <- dades_alcaldes %>%
  filter(num_legislatures == 12)


#els models de regressió amb les dades filtrades que exclouen ens 13 municipis constituïts després 1979

m1_atur_f <- lm(num_alcaldes ~ taxa_atur, data = dades_filtrades)
summary(m1_atur_f)

m2_poblacio_f <- lm(num_alcaldes ~ poblacio, data = dades_filtrades)
summary(m2_poblacio_f)

m3_edat_f <- lm(num_alcaldes ~ edat_mitjana, data = dades_filtrades)
summary(m3_edat_f)

m4_ideol_f <- lm(num_alcaldes ~ ideol_partits_indep, data = dades_filtrades)
summary(m4_ideol_f)

m5_multi_f <- lm(num_alcaldes ~ taxa_atur + poblacio + edat_mitjana + ideol_partits_indep, data = dades_filtrades)
summary(m5_multi_f)

m6_multi_controls_f <- lm(num_alcaldes ~ taxa_atur + poblacio + edat_mitjana + ideol_partits_indep + capital_provincia + dens_pob + altitud + num_legislatures, data = dades_filtrades)
summary(m6_multi_controls_f)


#Visualitzo els coeficients i l'error estàndard dels 6 models en una taula

#Presentació dels models en una taula
#Els 5 primers models en una taula
stargazer(m1_atur_f, m2_poblacio_f, m3_edat_f, m4_ideol_f, m5_multi_f, type = "text")

#Model amb els controls
stargazer(m6_multi_controls_f, type = "text")


    


